import axios from "axios";
import qs from "qs";
import config from "./config.js";
//根据环境变量区分接口地址 可选:开发模式,测试模式,生产模式 默认是生产模式,更改地址可以通过config.js
let baseUrl = null;
switch (process.env.NODE_ENV) {
  case "production":
    baseUrl = `${config.baseURL.production}`;
    break;
  case "test":
    baseUrl = `${config.baseURL.test}`;
    break;
  default:
    baseUrl = `${config.baseURL.development}`;
}
const instance = axios.create({
  baseURL: baseUrl,
  timeout: 10000,
});

//设置超时时间和跨域是否允许携带凭证
// instance.defaults.withCredentials = true;
//设置POST请求头，告知服务器请求主体的格式(这边设置成x-www-form-urlencoded格式，也可以设置json格式)
instance.defaults.headers["Content-Type"] = "application/x-www-form-urlencoded";
instance.defaults.transformRequest = (data) => qs.stringify(data);

//拦截器设置
//请求拦截器
instance.interceptors.request.use(
  (config) => {
    //携带上token
    let token = localStorage.getItem("token");
    // token && (config.headers.Authorization = token);
    //携带上cookie
    // let cookie = encodeURIComponent(localStorage.getItem("cookie"));
    //请求时带上时间戳和cookie
    // if (config.method == "post") {
    //   config.data = {
    //     ...config.data,
    //     cookie,
    //     tooken,
    //     _t: Date.parse(new Date()) / 1000,
    //   };
    // } else if (config.method == "get") {
    //   config.params = {
    //     _t: Date.parse(new Date()) / 1000,
    //     cookie,
    //     ...config.params,
    //   };
    // }
    return config;
  },
  (error) => {
    return Promise.reject(error);
  }
);
//响应拦截器
instance.interceptors.response.use(
  (response) => {
    return response;
  },
  (error) => {
    let { response } = error;
    if (response) {
      //服务器最起码返回结果
      switch (response.status) {
        case 301: //没登录就调用了需要登录的接口,网易云api特有
          error.message = "未登录，请先登录";
          alert("未登录，请先登录");
          break;
        case 401: //当前请求需要用户验证(不同公司需求不同,这里瞎写的)
          break;
        case 403: //服务器已经理解请求，但是拒绝执行(token过期)
          localStorage.removeItem("token");
          //跳转到登录页
          //还没做
          break;
        //以下状态码随便写的
        case 404:
          error.message = "请求失败，请求所希望得到的资源未被在服务器上发现";
          break;
        case 460:
          error.message = "cheating异常";
          break;
        case 501:
          error.message = "服务未实现";
          break;
        case 502:
          error.message = "网关错误";
          break;
        case 503:
          error.message = "服务不可用";
          break;
        case 504:
          error.message = "网关超时";
          break;
        case 505:
          error.message = "HTTP版本不受支持";
          break;
      }
    } else {
      if (!window.navigator.onLine) {
        //断网处理:（还没写）
        return;
      }
      console.log(error);
      return Promise.reject(error);
    }
  }
);
export default instance;
